﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using fideeraSoft.BO;
using fideeraSoft.Entities;
using System.Windows.Forms;
using System.Drawing;
using fideeraSoft.Utils;

namespace fideeraSoft.Handlers
{
    public class Handler
    {
        ProveedorBO provBO;
        FideeraForm formFrame;
        UsuarioBO usuarioBO;
        ProductoBO productoBO;
        MateriaPrimaBO materiaPrimaBO;
        LoteBO loteBO;
        RemitoEntradaBO remitoEntradaBO;
        MateriaPrima_X_LoteBO materiaPrimaXLoteBO;
        RemitoEntradaXLoteBO remitoEntradaXLoteBO;
        ProduccionBO produccionBO;
        Produccion_X_MatPrimaBO produccionXMatPrimBO;
        EnvasadoBO envasadoBO;
        SalidaBO salidaBO;
        RemitoSalidaXProduccionBO remitoSalidaXProduccionBO;

        public FideeraForm FormFrame
        {
            get { return formFrame; }
            set { formFrame = value; }
        }

        public Handler()
        {
            provBO = new ProveedorBO();
            usuarioBO = new UsuarioBO();
            productoBO = new ProductoBO();
            materiaPrimaBO = new MateriaPrimaBO();
            loteBO = new LoteBO();
            remitoEntradaBO = new RemitoEntradaBO();
            materiaPrimaXLoteBO = new MateriaPrima_X_LoteBO();
            remitoEntradaXLoteBO = new RemitoEntradaXLoteBO();
            produccionBO = new ProduccionBO();
            produccionXMatPrimBO = new Produccion_X_MatPrimaBO();
            envasadoBO = new EnvasadoBO();
            salidaBO = new SalidaBO();
            remitoSalidaXProduccionBO = new RemitoSalidaXProduccionBO();
        }

        public void backToPrincipal()
        {

            //  MessageBox.Show("TAMAÑO: " + this.FormFrame.Size.Height + " - " + this.FormFrame.Size.Width, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            this.formFrame.switchPanel(MetodosGenerales.crearPanelConImagen(this.formFrame.Size));

        }

        #region Proveedor
        public void altaProveedor(Proveedor proveedor)
        {
            provBO.altaProveedor(proveedor);
        }
        public int buscarNuevoUltimoIdProveedorEnBD()
        {
            return provBO.buscarNuevoUltimoIdProveedorEnBD();
        }

        public List<Proveedor> obtenerListaProveedoresEnBD()
        {
            return provBO.obtenerListaProveedoresEnBD();
        }

        public void bajaProveedor(Proveedor proveedor)
        {
            provBO.bajaProveedor(proveedor);
        }

        public Proveedor buscarProveedorPorCuil(string cuil)
        {
            return provBO.buscarProveedorPorCuil(cuil);
        }

        public Proveedor buscarProveedorPorId(int id)
        {
            return provBO.buscarProveedorPorId(id);
        }

        public Proveedor buscarProveedorPorRazonSocial(String razonSocial)
        {
            return provBO.buscarProveedorPorRazonSocial(razonSocial);
        }
        public void eliminarProveedorPorId(int id)
        {
            provBO.eliminarProveedorPorId(id);
        }

        public void eliminarTodosLosProveedoresEnDb()
        {
            this.provBO.eliminarTodosLosProveedoresEnDb();
        }

        #endregion

        #region Usuario
        public int buscarNuevoUltimoIdUsuarioEnBD()
        {
            return usuarioBO.buscarNuevoUltimoIdUsuarioEnBD();
        }

        public void altaUsuario(Usuario usuario)
        {
            usuarioBO.altaUsuario(usuario);
        }


        public List<Jerarquia> obtenerJerarquiasFromDB()
        {
            return usuarioBO.obtenerJerarquiasFromDB();
        }

        public Usuario buscarUsuarioPorDNI(string dni)
        {
            return usuarioBO.buscarUsuarioPorDNI(dni);
        }
        public Usuario buscarUsuarioPorUserName(string username)
        {
            return usuarioBO.buscarUsuarioPorUserName(username);
        }

        public void eliminarUsuarioPorId(int id)
        {
            usuarioBO.eliminarUsuarioPorId(id);
        }

        public  void eliminarTodosLosUsuariosEnDb()
        {
            usuarioBO.eliminarTodosLosUsuariosEnDb();
        }

        public List<Usuario> obtenerListaUsuariosEnDB()
        {
            return this.usuarioBO.obtenerListaUsuariosEnDB();
        }

        #endregion


        #region Producto
        public int buscarNuevoUltimoIdProductoEnBD()
        {
            return productoBO.buscarNuevoUltimoIdProductoEnBD();
        }



        public Producto buscarProductoPorNombre(string nombre)
        {
            return productoBO.buscarProductoPorNombre(nombre);

        }


        public void altaProducto(Producto producto)
        {
            productoBO.altaProducto(producto);
        }

        public void eliminarProductoPorID(int id)
        {
            productoBO.eliminarProductoPorID(id);
        }

        public Producto buscarProductoPorNombreYMarca(string nombre, string marca)
        {
            return this.productoBO.buscarProductoPorNombreYMarca(nombre, marca);
        }

        public List<Producto> buscarListaProductosPorNombre(string nombre)
        {
            return this.productoBO.buscarListaProductosPorNombre(nombre);
        }

        public List<Producto> buscarListaProductosPorMarca(string marca)
        {
            return this.productoBO.buscarListaProductosPorMarca(marca);
        }

        public void eliminarTodosLosProductosEnDb()
        {
            this.productoBO.eliminarTodosLosProductosEnDb();
        }

        #endregion

        #region Materia Prima

        public int buscarNuevoUltimoIdMateriaPrimaEnBD()
        {
            return materiaPrimaBO.buscarNuevoUltimoIdMateriaPrimaEnBD();
        }

        public MateriaPrima buscarMateriaPrimaPorNombre(string nombre)
        {
            return materiaPrimaBO.buscarMateriaPrimaPorNombre(nombre);
        }

        public void altaMateriaPrima(MateriaPrima materiaPrima)
        {
            materiaPrimaBO.altaMateriaPrima(materiaPrima);
        }

        public void eliminarMateriaPrimaPorID(int id)
        {
            materiaPrimaBO.eliminarMateriaPrimaPorID(id);
        }

        public MateriaPrima buscarMateriaPrimaPorID(int id)
        {
            return materiaPrimaBO.buscarMateriaPrimaPorID(id);
        }

        public void eliminarTodasLasMateriasPrimasEnDb()
        {
            this.materiaPrimaBO.eliminarTodasLasMateriasPrimasEnDb();
        }
       

        #endregion

        #region Lote

        public int buscarNuevoUltimoIdLoteEnBD()
        {
            return loteBO.buscarNuevoUltimoIdLoteEnBD();
        }
        public void altaLote(Lote lote)
        {
            this.loteBO.altaLote(lote);
        }
        
        public void eliminarLotePorId(int id)
        {
            this.loteBO.eliminarLotePorId(id);
        }

        public void eliminarTodosLosLotesEnDb()
        {
            this.loteBO.eliminarTodosLosLotesEnDb();
        }

        #endregion

        #region Remito Entrada

        public int buscarNuevoUltimoIdRemitoEntradaEnBD()
        {
            return this.remitoEntradaBO.buscarNuevoUltimoIdRemitoEntradaEnBD();
        }


        public void altaRemitoEntrada(RemitoEntrada remitoEntrada)
        {
            this.remitoEntradaBO.altaRemitoEntrada(remitoEntrada);
        }

        public void eliminarRemitoEntradaPorID(string id)
        {
            this.remitoEntradaBO.eliminarRemitoEntradaPorID(id);
        }


        public RemitoEntrada buscarRemitoEntradaPorCod(string cod)
        {
            return this.remitoEntradaBO.buscarRemitoEntradaPorCod(cod);

        }

        public RemitoEntrada buscarRemitoEntradaPorID(int id)
        {
           return  this.remitoEntradaBO.buscarRemitoEntradaPorID(id);

        }

        public void eliminarTodosLosRemitosEntradaEnDb()
        {
            this.remitoEntradaBO.eliminarTodosLosRemitosEntradaEnDb();
        }
        #endregion

        #region Materia Prima X Lote

        public int buscarNuevoUltimoIdMateriaPrimaXLoteEnBD()
        {
            return this.materiaPrimaXLoteBO.buscarNuevoUltimoIdMateriaPrimaXLoteEnBD();
        }

        public void altaMateriaPrima_X_Lote(MateriaPrima materiaPrima, Lote lote, int idMatPrimaXLote)
        {
            this.materiaPrimaXLoteBO.altaMateriaPrima_X_Lote(materiaPrima, lote, idMatPrimaXLote);
        }

        public List<MateriaPrimaXLotes> buscarListaMateriasPrimasXLotesPorID(int id)
        {
            return this.materiaPrimaXLoteBO.buscarListaMateriasPrimasXLotesPorID(id);
        }

        public void eliminarMateriaPrimasXLotesPorId(int id)
        {
            this.materiaPrimaXLoteBO.eliminarMateriaPrimasXLotesPorId(id);
        }

        public List<MateriaPrimaXLotes> buscarListaMateriasPrimasXLoteConCantidad()
        {
            return this.materiaPrimaXLoteBO.buscarListaMateriasPrimasXLoteConCantidad();
        }

        public void updateCantidadesMateriaPrimaXLote(MateriaPrimaXLotes matPrimaXLote)
        {
            this.materiaPrimaXLoteBO.updateCantidadesMateriaPrimaXLote(matPrimaXLote);
        }

        public MateriaPrimaXLotes buscarMateriaPrimaXLotePorIdMatYLote(MateriaPrima matPrima)
        {
            return this.materiaPrimaXLoteBO.buscarMateriaPrimaXLotePorIdMatYLote(matPrima);
        }

        public double obtenerCantidadTotalMateriaPrima_X_LotePorId(string idMatPrima)
        {
            return this.materiaPrimaXLoteBO.obtenerCantidadTotalMateriaPrima_X_LotePorId(idMatPrima);
        }


        public void eliminarTodasLasMateriasPrimasXLotesEnDb()
        {
            this.materiaPrimaXLoteBO.eliminarTodasLasMateriasPrimasXLotesEnDb();

        }

        #endregion

        #region RemitoEntrada X Lote

        public int buscarNuevoUltimoIdRemitoEntradaXLoteEnBD()
        {
            return this.remitoEntradaXLoteBO.buscarNuevoUltimoIdRemitoEntradaXLoteEnBD();
        }

        public void altaRemitoEntrada_X_Lote(RemitoEntrada remitoEntrada, Lote lote, int idRemitoEntradaXLote)
        {
            this.remitoEntradaXLoteBO.altaRemitoEntrada_X_Lote(remitoEntrada, lote, idRemitoEntradaXLote);
        }

        public List<RemitoEntrada_X_Lotes> getListaRemitoEntradaXLotesPorID(string strDataId)
        {
            return this.remitoEntradaXLoteBO.getListaRemitoEntradaXLotesPorID(strDataId);
        }


        public void eliminarRemitoEntradaXLotePorID(int id)
        {
            this.remitoEntradaXLoteBO.eliminarRemitoEntradaXLotePorID(id);
        }

        public void eliminarTodosLosRemitosEntradaXLoteEnDb()
        {
            this.remitoEntradaXLoteBO.eliminarTodosLosRemitosEntradaXLoteEnDb();
        }
        #endregion



        #region PRODUCCIÓN

        public int buscarNuevoUltimoIdProduccionBD()
        {
            return this.produccionBO.buscarNuevoUltimoIdProduccionBD();
        }

        public void altaProduccion(Produccion produccion)
        {
            this.produccionBO.altaProduccion(produccion);
        }

        public void updateFechaFinProduccionPorId(string strDataId, DateTime dtFechaFin)
        {
            produccionBO.updateFechaFinProduccionPorId(strDataId, dtFechaFin);
        }

        public void updateFechaInicioEnvasadoProduccionPorId(string id, DateTime dtFechaEnvasado)
        {
            produccionBO.updateFechaInicioEnvasadoProduccionPorId(id, dtFechaEnvasado);
        }
               
        public void updateFechaFinEnvasadoEnProduccionPorId(string id, DateTime dateTime)
        {
            produccionBO.updateFechaFinEnvasadoEnProduccionPorId(id, dateTime);
        }

        public void updateFechaFinSalidaEnProduccion(string id, DateTime dateTime)
        {
            produccionBO.updateFechaFinSalidaEnProduccion(id, dateTime);
        }

        public void updateCantidadPaquetesEnvasadosEnProduccionPorId(string id,string cantPaq)
        {
            produccionBO.updateCantidadPaquetesEnvasadosEnProduccionPorId(id, cantPaq);
        }

        public int obtenerCantidadTotalPaquetesProducicosPorIdProduco(string id)
        {
            return produccionBO.obtenerCantidadTotalPaquetesProducicosPorIdProduco(id);
        }

        public void updateObservacionFinalDeProduccionPorId(string Id, string observacionFinal)
        {
            this.produccionBO.updateObservacionFinalDeProduccionPorId( Id,  observacionFinal);
        }

        public void eliminarTodasLasProduccionesEnDb()
        {
            this.produccionBO.eliminarTodasLasProduccionesEnDb();
        }
        #endregion




        #region PRPDUCCIÓN POR MATERIA PRIMA

        public int buscarNuevoUltimoIdProduccionXMatPrimaBD()
        {
            return this.produccionXMatPrimBO.buscarNuevoUltimoIdProduccionXMatPrimaBD();
        }

        public void altaProduccionXMatPrima(Produccion_X_MateriaPrima prodXMatPrim)
        {
            this.produccionXMatPrimBO.altaProduccionXMatPrima(prodXMatPrim);
        }

        public  void eliminarTodasLasProduccionesXMateriasPrimasEnDb()
        {
            this.produccionXMatPrimBO.eliminarTodasLasProduccionesXMateriasPrimasEnDb();
        }

        
        #endregion
        

        #region ENVASADO

        public int buscarNuevoUltimoIdEnvasadoEnBD()
        {
            return envasadoBO.buscarNuevoUltimoIdEnvasadoEnBD();
        }

        public void altaEnvasado(Envasado envasado)
        {
            envasadoBO.altaEnvasado(envasado);
        }

        public void updateFechaFinEnvasadoPorId(string id, DateTime dateTimeFin)
        {
            this.envasadoBO.updateFechaFinEnvasadoPorId(id,dateTimeFin);
        }

        public void updateCantidadPaquetesEnvasadosPorId(string id, string cantPaq)
        {
               this.envasadoBO.updateCantidadPaquetesEnvasadosPorId(id,cantPaq);
        }


        public void updaceObservacionFinEnvasadoEnEnvasadoPorId(string idEnvasado, string observacionFin)
        {
            this.envasadoBO.updaceObservacionFinEnvasadoEnEnvasadoPorId(idEnvasado, observacionFin);
        }

        public  void eliminarTodosLosEnvasadosEnDb()
        {
            this.envasadoBO.eliminarTodosLosEnvasadosEnDb();
        }

        #endregion

        #region SALIDA
        public int buscarNuevoUltimoIdRemitoSalidaEnBD()
        {
            return salidaBO.buscarNuevoUltimoIdRemitoSalidaEnBD();
        }


        public void altaRemitoSalida(RemitoSalida remitoSalida)
        {
            salidaBO.altaRemitoSalida(remitoSalida);
        }

        public void eliminarTodosLosRemitosSalidaEnDb()
        {
            salidaBO.eliminarTodosLosRemitosSalidaEnDb();
        }
        
        #endregion

        #region REMITO SALIDA X PRODUCCION
        
        public void altaRemitoSalida_X_Produccion(RemitoSalida_X_Produccion remSalidaXProd)
        {
            remitoSalidaXProduccionBO.altaRemitoSalida_X_Produccion(remSalidaXProd);
        }

        public int buscarNuevoUltimoIdRemitoSalidaXProduccionEnBD()
        {
            return remitoSalidaXProduccionBO.buscarNuevoUltimoIdRemitoSalidaXProduccionEnBD();

        }

        public void eliminarTodosLosRemitosSalidaXProduccionEnDb()
        {
            this.remitoSalidaXProduccionBO.eliminarTodosLosRemitosSalidaXProduccionEnDb();
        }

        #endregion
































       
    }


}
